#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>

using namespace std;

bool v[15][15];
int mp[15][15];
struct piece
{
	int x,y,kind;
}p[8];
int n,gx,gy;
int dx[4]={-1,+1,0,0};
int dy[4]={0,0,-1,+1};
void work(int k)
{
	int kind=p[k].kind,flag;
	int xx=p[k].x,yy=p[k].y;
	if(kind==1)
	{
		flag=1;
		for(int i=xx-1;i>=1;i--)
		{
			if(mp[i][yy]!=0)
			{
				flag=i;
				break;
			}
		}
		for(int i=xx-1;i>=flag;i--)
			v[i][yy]=true;
	}
	if(kind==2)
	{
		flag=1;
		//to left
		for(int j=yy-1;j>=1;j--)
		{
			if(mp[xx][j]!=0)
			{
				flag=j;
				break;
			}
		}
		for(int j=yy-1;j>=flag;j--)
			v[xx][j]=true;
		// to right
		flag=9;
		for(int j=yy+1;j<=9;j++)
		{
			if(mp[xx][j]!=0)
			{
				flag=j;
				break;
			}
		}
		for(int j=yy+1;j<=flag;j++)
			v[xx][j]=true;
		//to up
		flag=1;
		for(int i=xx-1;i>=1;i--)
			if(mp[i][yy]!=0)
			{
				flag=i;
				break;
			}
		for(int i=xx-1;i>=flag;i--)
			v[i][yy]=true;
		// to down
		flag=10;
		for(int i=xx+1;i<=10;i++)
			if(mp[i][yy]!=0)
			{
				flag=i;
				break;
			}
		for(int i=xx+1;i<=flag;i++)
			v[i][yy]=true;
	}
	if(kind==3)
	{
		if(mp[xx+1][yy]==0)
		{
			v[xx+2][yy-1]=v[xx+2][yy+1]=true;
		}
		if(mp[xx-1][yy]==0)
		{
			if(xx-2>=0)v[xx-2][yy-1]=v[xx-2][yy+1]=true;
		}
		if(mp[xx][yy+1]==0)
		{
			v[xx-1][yy+2]=v[xx+1][yy+2]=true;
		}
		if(mp[xx][yy-1]==0)
		{
			if(yy-2>=0)v[xx-1][yy-2]=v[xx+1][yy-2]=true;
		}
	}
	if(kind==4)
	{
		int f2;
		flag=1;f2=1;
		//to left
		for(int j=yy-1;j>=1;j--)
		{
			if(mp[xx][j]!=0)
			{
				flag=j;
				break;
			}
		}
		for(int j=flag-1;j>=1;j--)
		{
			if(mp[xx][j]!=0)
			{
				f2=j;
				break;
			}
		}

		for(int j=flag-1;j>=f2;j--)
			v[xx][j]=true;
		// to right
		f2=flag=9;
		for(int j=yy+1;j<=9;j++)
		{
			if(mp[xx][j]!=0)
			{
				flag=j;
				break;
			}
		}
		for(int j=flag+1;j<=9;j++)
		{
			if(mp[xx][j]!=0)
			{
				f2=j;
				break;
			}
		}

		for(int j=flag+1;j<=f2;j++)
			v[xx][j]=true;
		//to up
		flag=f2=1;
		for(int i=xx-1;i>=1;i--)
			if(mp[i][yy]!=0)
			{
				flag=i;
				break;
			}
		for(int i=flag-1;i>=1;i--)
			if(mp[i][yy]!=0)
			{
				f2=i;
				break;
			}

		for(int i=flag-1;i>=f2;i--)
			v[i][yy]=true;
		// to down
		flag=f2=10;
		for(int i=xx+1;i<=10;i++)
			if(mp[i][yy]!=0)
			{
				flag=i;
				break;
			}
		for(int i=flag+1;i<=10;i++)
			if(mp[i][yy]!=0)
			{
				f2=i;
				break;
			}
		for(int i=flag+1;i<=f2;i++)
			v[i][yy]=true;

	}
}

bool check()
{
	for(int i=0;i<4;i++)
	{
		int xx=gx+dx[i],yy=gy+dy[i];
		if(xx>3||xx<1||yy>6||yy<4)continue;
		if(!v[xx][yy])return false;

	}
	return true;
}
int main()
{
	while(scanf("%d%d%d",&n,&gx,&gy)&&(n+gx+gy)!=0)
	{
		memset(v,0,sizeof(v));
		memset(mp,0,sizeof(mp));
		char ch;
		for(int i=0;i<=12;i++)
			v[0][i]=1;	
		for(int i=1;i<=n;i++)
		{
			cin>>ch>>p[i].x>>p[i].y;
			if(ch=='G')p[i].kind=1;
			if(ch=='R')p[i].kind=2;
			if(ch=='H')p[i].kind=3;
			if(ch=='C')p[i].kind=4;
			mp[p[i].x][p[i].y]=p[i].kind;
		}
		for(int i=1;i<=n;i++)
			work(i);
		bool ans=check();
		if(ans)printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}
			
			

